import { defineStore } from 'pinia'

type User = {
    name: string,
    age: number
}

// let result:User = {
//     name: '小丽',
//     age: 12
// }

const Login = ():Promise<User> => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                name: '小玲',
                age: 15
            })
        }, 500)
    })
}


export const useUserStore = defineStore('users', {
    state: () => {
        return {
            user: <User>{},                            // 这种方式的断言，是方便类型推导
            name: '第一梦'
        }
    },
    // computed 修饰一些值
    getters: {
        newName():string {             // 加一个返回值类型
            return `$-${this.name}--${this.getAge}`            // 这里也可以相互调用属性
        },
        getAge(): number {            
            return this.user.age
        }
    },
    // methods 同步、异步都可以
    actions: {
        // setUser() {                
        //     this.user = result      // 同步的方式赋值
        // }
        // 异步的方式
        async setUser() {
            const result = await Login()
            this.user = result
            this.setName('第二梦')                   // this 调用其他方法，方法可以互相调用
        },
        setName(name: string) {
            this.name = name
        }
    }
})